﻿using FMAPortalBase;
using FMAPortalBase.Manager;
using FMAPortalBase.Model;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web.Mvc;

namespace FMAPortal.Controllers
{
    public class ServiceController : Controller
    {
        [HttpPost]
        public JsonResult getAllFileItem(String p)
        {
            if (String.IsNullOrEmpty(p))
            {
                p = Const.PAGES_PATH;
            }
            FileManager fm = new FileManager();
            List<FileItem> resultList = fm.GetAllFileItemList(p);
            resultList.ForEach(x => x.Name = x.Name.Replace(Const.PAGE_EXT, ""));
            return resultData(resultList);
        }


        [HttpPost]
        public JsonResult savePage()
        {
            StringBuilder sbResult = new StringBuilder();
            Boolean isError = false;
            String type = Request.Form["type"];
            String pageName = Request.Form["pageName"];
            String pageTitle = Request.Form["pageTitle"];
            String isMenuPage = Request.Form["isMenuPage"];
            String isActivePage = Request.Form["isActivePage"];
            String pageTag = Request.Form["pageTag"];
            String pagePath = Request.Form["pagePath"];
            if (String.IsNullOrEmpty(pageName))
            {
                isError = true;
                sbResult.AppendLine("Sayfa adı gerekli.");
            }
            if (String.IsNullOrEmpty(pageTitle))
            {
                isError = true;
                sbResult.AppendLine("Sayfa başlığı gerekli.");
            }
            if (String.IsNullOrEmpty(pagePath))
            {
                isError = true;
                sbResult.AppendLine("Sayfa konumu gerekli. Lütfen sayfayı yenileyerek işlemi tekrarlayınız. yine hata alırsanız sistem yöneticiniz ile görüşünüz.");
            }
            if (isError)
            {
                return resultData(sbResult, true);
            }
            else
            {
                Page page = new Page();
                page.Name = pageName;
                page.Title = pageTitle;
                page.IsActive = isActivePage.Equals("true");
                page.IsMenu = isMenuPage.Equals("true");
                page.Head = pageTag;
                FileManager fm = new FileManager();
                try
                {
                    if (String.IsNullOrEmpty(type) || !type.Equals("save"))
                    {
                        fm.Create(page.ToJson(), Const.PAGES_PATH + "\\" + pagePath + "\\" + page.Name + Const.PAGE_EXT);
                    }
                    else
                    {
                        fm.Write(page.ToJson(), Const.PAGES_PATH + "\\" + pagePath + "\\" + page.Name + Const.PAGE_EXT);
                    }
                }catch(Exception ex){
                    return resultData(ex);
                }
                sbResult.AppendLine("Sayfa eklendi.");
                return resultData(sbResult.ToString());
            }
        }

        [HttpPost]
        public JsonResult delete()
        {
            StringBuilder sbResult = new StringBuilder();
            Boolean isError = false;
            String pageName = Request.Form["pageName"];
            String pagePath = Request.Form["pagePath"];
            String file = Request.Form["file"];
            if (String.IsNullOrEmpty(pageName))
            {
                isError = true;
                sbResult.AppendLine("Sayfa adı gerekli.");
            }
            if (String.IsNullOrEmpty(pagePath))
            {

                isError = true;
                sbResult.AppendLine("Sayfa konumu gerekli. Lütfen sayfayı yenileyerek işlemi tekrarlayınız. yine hata alırsanız sistem yöneticiniz ile görüşünüz.");
            }
            if (isError)
            {
                return resultData(sbResult, true);
            }
            else
            {
                FileManager fm = new FileManager();
                try
                {
                    fm.delete(Const.PAGES_PATH + "\\" + pagePath, file.Equals("true"));
                }
                catch (Exception ex)
                {
                    return resultData(ex);
                }
                sbResult.AppendLine("Sayfa eklendi.");
                return resultData(sbResult.ToString());
            }
        }

        private JsonResult resultData(Object obj, Boolean? isError = null, JsonRequestBehavior? behavior = null)
        {
            JsonResultModel result = new JsonResultModel() { isError = isError ?? false, data = ((isError == true) ? new Exception(obj.ToString()) : obj) };
            if (isError == null && obj.GetType() == typeof(Exception))
            {
                result.isError = true;
                result.data = ((Exception)obj).Message;
            }
            if (behavior == null)
                return Json(result);
            else
                return Json(result, behavior ?? JsonRequestBehavior.DenyGet);
        }
    }
}
